import Vue from "vue";
import VueRouter from "vue-router";
import routes from "./routes";
import $store from "../store";
import { Message } from "element-ui";

Vue.use(VueRouter);

const router = new VueRouter({
  mode: "history",
  base: process.env.BASE_URL,
  routes,
});

router.beforeEach((to, from, next) => {
  // 对无需授权访问得路由页面直接进行放行操作
  if (to.meta.isPublic) {
    next();
    return;
  }
  // 判断是否登录 => 基于中央仓库中是否存在token表示用户是否登录
  if ($store.state.token == null || $store.state.token == "null") {
    Message.warning("请先登录");
    next({
      name: "login",
    });
    return;
  }

  // 剔除403，404 等无需判断的页面
  if (to.meta.isPublicAuth) {
    next();
    return;
  }

  // 判断当前登录得用户是否具有对to描述路由访问得权限
  // 权限对比参照，就是当前登录用户，通过异步请求从服务器加载得可访问得导航列表
  // console.log(to.path);
  // console.log($store.state.menus);

  // 写法1
  // let isAuth = false; // 没有这个地址的访问权限
  // for (let m of $store.state.menus) {
  //   if (m.right_path == to.path) {
  //     // 找到该用户对该地址的访问权限
  //     isAuth = true;
  //     break;
  //   }
  // }

  // 写法2
  let isAuth = $store.state.menus.some((m) => m.right_path == to.path);
  console.log(isAuth);

  if (isAuth) {
    next();
  } else {
    next({
      name: "noAuth",
      replace: true, // 解决vue2路由快速导航切换时产生的错误
    });
  }
});

export default router;
